<html>
  <head>
    <title>
      启用分布式事件收件箱
    </title>
  </head>
  <body>
    <script>
      /*
         3、启用事件收件箱

                                            启用事件发件箱取决于你的数据库提供程序。

                                            ①、为 EF Core  启用事件收件箱

                                                    打开你的DbContext类，实现 IHasEventOutBox接口。你最终应该通过DbSet属性添加到你的DbContext类中：

                                                          public DbSet<OutgoingEventRecord> IncomingEvents  { get; set; }
                                                            
                                                    在DbContext类的OnModelCreating方法中添加以下行：

                                                            builder.ConfigureEventInbox();

                                                    使用标准的Add-Migration和Update-Database命令将更改应用到数据库中。

                                                    如果要使用命令行终端，请在数据库集成项目的根目录中运行以下命令：

                                                            dotnet ef migrations add "Added_Event_Inbox"
                                                            dotnet ef database update

                                                    最后，在模块类的ConfigureServices方法中编写以下配置代码（将YourDbContext替换为你自己的DbContext类）：
                                                           
                                                            Configure<AbpDistributedEventBusOptions>(options =>  // 分布式事件总线配置类
                                                            {
                                                                options.Outboxes.Configure(config =>  
                                                                {
                                                                    config.UseDbContext<YourDbContext>();   // 配置分布式事件总线要使用的数据库
                                                                });
                                                            });

                                            ②、为 MangoDb启用启用收件箱
                                                                        
                                                            .......


                                             ③、发件箱分布式锁

                                                        重要：发件箱发送服务使用分布式锁，以确保只有你的应用程序的单个实例同时消耗发件箱队列。

                                                        分布式锁定键应该是每个数据库唯一的。

                                                        config对象（在options.Outboxes.Configure(...)方法中）具有DatabaseName属性，该属性用于分布式锁定键以确保唯一性。

                                                        DatabaseName由UseDbContext方法自动设置，从YourDbContext类的ConnectionStringName属性中获取库名。

                                                        因此，如果你的系统中有多个数据库，请确保对同一数据库使用相同的连接字符串名称，但对不同的数据库使用不同的连接字符串名称。

                                                        如果不能确保，可以手动设置config.DatabaseName（在UseDbContext行之后）以确保唯一性。
                                           
                                                        
      
      */
    </script>
  </body>
</html>